﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CrmContacto.Contracts.Services;
using CrmContacto.Contracts;
using System.Net;
using System.Collections.Specialized;
using System.Web;

namespace CustomerHook.emBlue
{
    public class HookCrmEmBlue : ICustomerServiceHook
    {
        private string schema_listas_id;
        private string emp_id;
        private string emp_nombre;
        private string parameter;

        public void LoadConfiguration(string configuration)
        {
            //schema_listas_id=78057;emp_id=812;emp_nombre=oripen;parameter=54sa354asd3543as54;
            if (!String.IsNullOrEmpty(configuration))
            {
                string[] configSplit = configuration.Split(';');
                schema_listas_id = configSplit[0].Split('=')[1];
                emp_id = configSplit[1].Split('=')[1];
                emp_nombre = configSplit[2].Split('=')[1];
                parameter = configSplit[3].Split('=')[1];
            }
        }

        public bool BeforeSave(Cliente cliente)
        {
            return false;
        }

        public bool AfterSave(Cliente cliente)
        {
            bool resultado = false;
            if (!String.IsNullOrEmpty(cliente.Email))
            {
                WebClient webClient = new WebClient();

                string address = @"http://app.embluejet.com/Mod_Campaigns/emblue_listas_edit.asp?subaccion=edit";

                if (cliente.Nombre == null)
                    cliente.Nombre = string.Empty;

                if (cliente.Apellido == null)
                    cliente.Apellido = string.Empty;

                bool conNombre = !String.IsNullOrEmpty(cliente.Nombre);
                bool conApellido = !String.IsNullOrEmpty(cliente.Apellido);
                bool conMesCumpleaos = cliente.CumpleMes.HasValue;
                bool conCumpleaños = cliente.CumpleAnio.HasValue && cliente.CumpleMes.HasValue && cliente.CumpleDia.HasValue;
                bool conCreacion = cliente.AuditFechaCreacion != DateTime.MinValue;

                string fechaCumple = string.Empty;
                if (conCumpleaños)
                {
                    fechaCumple = new DateTime(cliente.CumpleAnio.Value, cliente.CumpleMes.Value, cliente.CumpleDia.Value).ToString("yyyy-MM-dd");
                }

                NameValueCollection nvc = new NameValueCollection();
                nvc.Add("schema_listas_id", schema_listas_id); //70482 (produccion)   /   78057 (prueba)
                nvc.Add("emp_id", emp_id);
                nvc.Add("emp_nombre", emp_nombre);
                nvc.Add("parameter", parameter);
                nvc.Add("urlredirect", "http://www.penguinargentina.com/newsletter_ok.php?nombre=Nombre&email=email");
                nvc.Add("Campo_1", cliente.Email); //email
                nvc.Add("Campo_existe_1", "SI");
                nvc.Add("Campo_2", "1");
                nvc.Add("Campo_existe_2", "SI");
                nvc.Add("Campo_3", cliente.Nombre); // Nombre
                nvc.Add("Campo_existe_3", "SI");
                nvc.Add("Campo_4", cliente.Apellido); // Apellido                
                nvc.Add("Campo_existe_4", "SI");
                nvc.Add("Campo_5",fechaCumple); // $nacimiento	AAAA-MM-DD
                nvc.Add("Campo_existe_5", "SI");
                nvc.Add("Campo_6", string.Format("{0:00}", cliente.CumpleMes.Value)); // $cumplemes	MM
                nvc.Add("Campo_existe_6", "SI");
                nvc.Add("Campo_7", "es"); // $lang	es
                nvc.Add("Campo_existe_7", "SI");
                nvc.Add("Campo_8", "web");
                nvc.Add("Campo_existe_8", "SI");
                nvc.Add("Campo_9",cliente.AuditFechaCreacion.ToString("yyyy-MM-dd")); // $fechaalta	
                nvc.Add("Campo_existe_9", "SI");
                
                var returnData = webClient.UploadValues(address, nvc);

                string resultadoQuery = ASCIIEncoding.ASCII.GetString(returnData);

                resultado = resultadoQuery.Contains("Newsletter ok");
                // esta ok si en resultado esta la frase "Newsletter ok"

            }

            return resultado;
        }
    }
}
